iT邦幫忙

4

[Day 6]用 SQLite 管理爬蟲結果

  • 分享至 

  • xImage
  •  

建立程式 save_to_db.py
在project資料夾新增一個檔案,貼上以下程式碼:

# save_to_db.py
import sqlite3
import csv
import argparse

def init_db(dbname="crawler.db"):
    conn = sqlite3.connect(dbname)
    cur = conn.cursor()
    cur.execute("""
        CREATE TABLE IF NOT EXISTS links (
            id INTEGER PRIMARY KEY AUTOINCREMENT,
            text TEXT,
            url TEXT UNIQUE
        )
    """)
    conn.commit()
    return conn

def save_csv_to_db(csvfile, dbname="crawler.db"):
    conn = init_db(dbname)
    cur = conn.cursor()
    with open(csvfile, newline="", encoding="utf-8") as f:
        reader = csv.DictReader(f)
        for row in reader:
            try:
                cur.execute("INSERT OR IGNORE INTO links (text, url) VALUES (?, ?)",
                            (row["text"], row["url"]))
            except Exception as e:
                print("⚠️ 插入失敗:", e)
    conn.commit()
    conn.close()
    print(f"✅ {csvfile} 已存入 {dbname}")

def list_links(dbname="crawler.db", limit=20):
    conn = sqlite3.connect(dbname)
    cur = conn.cursor()
    cur.execute("SELECT id, text, url FROM links LIMIT ?", (limit,))
    for row in cur.fetchall():
        print(f"[{row[0]}] {row[1]} - {row[2]}")
    conn.close()

if __name__ == "__main__":
    ap = argparse.ArgumentParser(description="將 CSV 存進 SQLite,並可查詢")
    ap.add_argument("--csv", help="要匯入的 CSV 檔名")
    ap.add_argument("--list", action="store_true", help="列出資料庫前幾筆")
    ap.add_argument("--db", default="crawler.db", help="SQLite 資料庫名稱")
    args = ap.parse_args()

    if args.csv:
        save_csv_to_db(args.csv, args.db)
    if args.list:
        list_links(args.db)

使用方式
1.把昨天產生的 clean_links.csv 存進 SQLite:

python save_to_db.py --csv clean_links.csv

2.列出前 20 筆:

python save_to_db.py --list

會看到類似:[1] 技術文章 - https://ithelp.ithome.com.tw/articles?tab=tech [2] 2025 鐵人賽 - https://ithelp.ithome.com.tw/2025ironman/ ...
實作:
https://ithelp.ithome.com.tw/upload/images/20250923/201693689ERWLT9Qqc.png

今日重點
SQLite 是 Python 內建的資料庫,不需要額外安裝。
用 INSERT OR IGNORE 可以避免重複資料。
有了資料庫,你可以用 SQL 做更複雜的查詢(例如搜尋包含「Python」的標題)。


圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言